package com.czk.netty.netty.mpscUnboundedArrayQueue;

import io.netty.util.internal.shaded.org.jctools.queues.MpscUnboundedArrayQueue;

/**
 * 在Netty中,IO线程用于存储任务的容器是MpscUnboundedArrayQueue类. 所有对外的读写操作,都'委托'给IO线程来执行,
 * 非IO线程(比如业务线程)若要写数据,必须将写操作封装成一个任务,提交到IO线程的任务队列中.IO线程会择机执行任务队列中的任务,
 * 将数据写入到网络(实际只是写到TCP缓冲区).
 * 那么这个任务队列就很重要了,它必须是高性能的. 在Netty以前的版本中,使用JDK的BlockingQueue实现这个任务队列,
 * 而Netty是一个追求性能极致的框架(不被规则和常规所束缚),目前选择jctools这个工具包中的MpscUnboundedArrayQueue类实现任务队列.
 *
 * @Author:ChenZhangKun
 * @Date: 2021/5/28 10:27
 */
public class MpscUnboundedArrayQueueDemo {
    public static void main(String[] args) {
        // 创建数组对象
        // 这个MpscUnboundedArrayQueue队列很特别,它是数组和链表的结合.但是它不是哈希,
        // 同等大小的数组通过链表连接
        MpscUnboundedArrayQueue mpscUnboundedArrayQueue = new MpscUnboundedArrayQueue(4);
        new Thread(() -> {
            for (int i = 0; i < 100000; i++) {
                mpscUnboundedArrayQueue.offer(i);
            }
        }).start();
        System.out.println();
    }
}
